/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.edu.espe.ccsoft.mantenimiento.bean;

import ec.edu.espe.ccsoft.mantenimiento.modelos.MarcaBus;
import ec.edu.espe.ccsoft.mantenimiento.modelos.TipoUnidad;
import ec.edu.espe.ccsoft.mantenimiento.modelos.Unidad;
import ec.edu.espe.ccsoft.mantenimiento.servicios.MarcaBusServicio;
import ec.edu.espe.ccsoft.mantenimiento.servicios.TipoUnidadServicio;
import ec.edu.espe.ccsoft.mantenimiento.servicios.UnidadServicio;
import ec.edu.espe.ccsoft.mantenimiento.utils.ManejoAcciones;
import ec.edu.espe.ccsoft.mantenimiento.utils.Mensajes;
import java.io.Serializable;
import java.util.Calendar;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;

/**
 *
 * @author misahaelfernandez
 */
@ManagedBean
@ViewScoped
public class UnidadBean extends ManejoAcciones implements Serializable {

    @EJB
    private UnidadServicio unidadServicio;
    @EJB
    private TipoUnidadServicio tipoUnidadServicio;
    @EJB
    private MarcaBusServicio marcaBusServicio;

    private List<Unidad> unidades;
    private List<TipoUnidad> tipoUnidades;
    private List<MarcaBus> marcaBuses;
    private Unidad unidad;
    private Mensajes mensaje;

    @PostConstruct
    public void init() {
        unidades = unidadServicio.obtenerTodasActivas();
        tipoUnidades = tipoUnidadServicio.obtenerTodoActivos();
        marcaBuses = marcaBusServicio.obtenerTodasActivas();
        mensaje = new Mensajes();
    }

    public void cargarNuevo() {
        unidad = new Unidad();
        super.nuevoRegistro();
        tituloDialogo = tituloDialogo + " Unidad";
    }

    public void cargarModificar() {
        super.modificarRegistro();
        tituloDialogo = tituloDialogo + " Unidad";
    }

    public void cargarDetalles() {
        super.detallesRegistro();
        tituloDialogo = tituloDialogo + " Unidad";
    }

    public void guardar() {
        try {
            if (unidadServicio.obtenerPorNumeroBus(unidad.getNumBus()) == null) {
                unidad.setFechaCreacion(Calendar.getInstance().getTime());
                unidad.setEstado(true);
                this.unidadServicio.crear(unidad);
                unidades.add(unidad);
                mensaje.addMessageSuccefull("Información", "La unidad ha sido creado con éxito");
                RequestContext.getCurrentInstance().update("@form");
                RequestContext.getCurrentInstance().execute("PF('dlDialogVar').hide();");
            } else {

                mensaje.addMessageSuccefull("Error", "La unidad ya se encuentra registrada");

            }
        } catch (Exception e) {
            mensaje.addMessageError("Error", "Error al crear la unidad " + e.getMessage());
        }
    }

    public void modificar() {
        try {
            this.unidadServicio.actualizar(unidad);
            if (!unidad.getEstado()) {
                unidades.remove(unidad);
                mensaje.addMessageSuccefull("Información", "La unidad ha sido eliminada con éxito");
            } else {

                mensaje.addMessageSuccefull("Información", "La unidad ha sido modificada con éxito");
            }
            RequestContext.getCurrentInstance().update("@form");
            RequestContext.getCurrentInstance().execute("PF('dlDialogVar').hide();");
        } catch (Exception e) {
            mensaje.addMessageError("Error", "Error al modificar la unidad " + e.getMessage());
        }
    }

    public Unidad getUnidad() {
        return unidad;
    }

    public void setUnidad(Unidad unidad) {
        this.unidad = unidad;
    }

    public List<Unidad> getUnidades() {
        return unidades;
    }

    public List<TipoUnidad> getTipoUnidades() {
        return tipoUnidades;
    }

    public List<MarcaBus> getMarcaBuses() {
        return marcaBuses;
    }

    public TipoUnidad obtenerTipoUnidad(Object codigo) {
        try {
            Integer codigoTipoUnidad = Integer.parseInt(codigo.toString());
            return tipoUnidadServicio.obtenerPorCodigo(codigoTipoUnidad);
        } catch (Exception e) {
            return null;
        }
    }

    public MarcaBus obtenerMarcaBus(Object codigo) {
        try {
            Integer codigoMarcaBus = Integer.parseInt(codigo.toString());
            return marcaBusServicio.obtenerPorCodigo(codigoMarcaBus);
        } catch (Exception e) {
            return null;
        }
    }
}
